
import reflect.ISkill;
import reflect.HeroFactory;

//V3
//import factory.ISkill;
//import factory.HeroFactory;


//V2
//import abstraction.hero.Camille;
//import abstraction.hero.Diana;
//import abstraction.hero.Irelia;


//V1
//import awkward.hero.Camille;
//import awkward.hero.Diana;
//import awkward.hero.Irelia;

import java.util.Scanner;

public class Main {

    //V1：awkward-烂大街的代码new
//    public static void main(String[] args) {
//        String name = Main.getPlayerInput();
//
//        //只有一个英雄
////        if(name.equals("Diana")){
////            Diana diana = new Diana();
////            diana.r();
////        }
//
//        //多个英雄
//        switch (name){
//            case "Diana":
//                Diana diana = new Diana();
//                diana.r();
//                break;
//            case "Irelia":
//                Irelia irelia = new Irelia();
//                irelia.r();
//                break;
//            case "Camille":
//                Camille camille = new Camille();
//                camille.r();
//                break;
//        }
//    }

    //V2：abstraction-使用interface抽象风格
//    public static void main(String[] args) throws Exception {
//        String name = Main.getPlayerInput();
//        ISkill iSkill;
//        //interface:统一方法调用，不能统一对象实例化
//        switch (name){
//            case "Diana":
//                iSkill = new Diana();
//                break;
//            case "Irelia":
//                iSkill = new Irelia();
//                break;
//            case "Camille":
//                iSkill = new Camille();
//                break;
//            default:
//                throw new Exception();
//        }
//        iSkill.r(); //可能没有值，Java编译期间就报错了
//    }

    //V3:工厂模式，消灭了new对象，实现OCP（但是要改HeroFactory）
    //V34都能用
    public static void main(String[] args) throws Exception {
        String name = Main.getPlayerInput();
        //factory的ISkill，但是HeroFactory不是稳定代码块
        ISkill iSkill = HeroFactory.getHero(name); //向容器要对象
        //通过静态实现
        iSkill.r();//完成了OCP的细节
    }

    private static String getPlayerInput(){
        System.out.println("Enter a hero's name!");

        //java的控制台输入
        Scanner scanner = new Scanner(System.in);
       return scanner.nextLine();
    }
}
